﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModuloAdministrativo.WSsiar;
using ModuloAdministrativo.Classes;

namespace ModuloAdministrativo
{
    public partial class SIAR_PrincipalForm : Form
    {
        WSsiar.ServicosSIARSoapClient ws = new WSsiar.ServicosSIARSoapClient();
        private bool caixaAberto;
        private PessoaBean usuarioAtual;
        private int tentativasLogin = 0;

        private EstoqueInsumo relatorioInsumo = null;
        string relatorio = null;

        public SIAR_PrincipalForm()
        {
            InitializeComponent();
        }

        private void SIAR_Principal_Load(object sender, EventArgs e)
        {
            this.caixaAberto = false;
            this.WindowState = FormWindowState.Maximized;
            login();
            bloquearBotoes();
        }

        private void sisCaixaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            caixaStripButton_Click(sender, e);
        }

        private void caixaStripButton_Click(object sender, EventArgs e)
        {
            if (this.caixaAberto)
            {
                //FECHA O CAIXA
                this.caixaAberto = false;
                this.caixaStripButton.Text = "Abrir caixa";
                this.caixaStripButton.ToolTipText = "Abrir caixa";
                this.sisCaixaToolStripMenuItem.Text = "Abrir caixa";
                this.sisCaixaToolStripMenuItem.ToolTipText = "Abrir caixa";
                this.sisCaixaToolStripMenuItem.Image = Properties.Resources._16x16_caixaAbrir;
                this.caixaStripButton.Image = Properties.Resources._32x32_caixaAbrir;
                bloquearBotoes();
                fecharMDIchildren();
                FinanceiroBean fin = new FinanceiroBean();
                fin = ws.CaixaRecuperar();
                Financeiro caixa = new Financeiro();
                caixa.DataAbertura = fin.DataAbertura;
                caixa.Abertura = fin.Abertura;
                ws.CaixaFechar(caixa);
            }
            else
            {
                //ABRE O CAIXA
                this.caixaAberto = true;
                this.caixaStripButton.Text = "Fechar caixa";
                this.caixaStripButton.ToolTipText = "Fechar caixa";
                this.sisCaixaToolStripMenuItem.Text = "Fechar caixa";
                this.sisCaixaToolStripMenuItem.ToolTipText = "Fechar caixa";
                this.sisCaixaToolStripMenuItem.Image = Properties.Resources._16x16_caixaFechar;
                this.caixaStripButton.Image = Properties.Resources._32x32_caixaFechar;
                desbloquearBotoes();
                AbrirCaixaForm form = new AbrirCaixaForm();
                form.ShowDialog();
            }
        }

        private void vendasStripButton_Click(object sender, EventArgs e)
        {
            foreach (Form f in this.MdiChildren.ToList())
            {
                if (f is VendasForm)
                {
                    f.BringToFront();
                    return;
                }
            }
            VendasForm mdiForm = new VendasForm();
            mdiForm.MdiParent = this;
            mdiForm.setUsuarioAtual(usuarioAtual);
            mdiForm.Show();
        }
        
        private void fecharSessaoStripButton_Click(object sender, EventArgs e)
        {
            DialogResult dlgResult = MessageBox.Show("Deseja encerrar a sessão de " + usuarioAtual.Login + "?", "Fechar sessão?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dlgResult == DialogResult.Yes)
            {
                bloquearBotoes();
                if (this.caixaAberto)
                    caixaStripButton_Click(sender, e);
                this.fecharSessaoStripButton.Enabled = false;
                this.statusLogin.Text = "";
                login();
            }
        }

        private void barraDeFerramentasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (barraDeFerramentasToolStripMenuItem.Checked)
            {
                toolStrip.Visible = false;
                barraDeFerramentasToolStripMenuItem.Checked = false;
            }
            else
            {
                toolStrip.Visible = true;
                barraDeFerramentasToolStripMenuItem.Checked = true;
            }
        }

        private void barraDeStatusToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (barraDeStatusToolStripMenuItem.Checked)
            {
                statusStrip.Visible = false;
                barraDeStatusToolStripMenuItem.Checked = false;
            }
            else
            {
                statusStrip.Visible = true;
                barraDeStatusToolStripMenuItem.Checked = true;
            }
        }

        /// <summary>
        /// Método responsável por bloquear todos os botões do ToolStrip, com exceção do "Abrir caixa".
        /// </summary>
        private void bloquearBotoes()
        {
            this.vendasStripButton.Enabled = false;
            this.entregasStripButton.Enabled = false;
            this.cozinhaStripButton.Enabled = false;
            this.cozinhaToolStripMenuItem.Enabled = false;
            this.vendasToolStripMenuItem.Enabled = false;
            this.entregasToolStripMenuItem.Enabled = false;
        }

        /// <summary>
        /// Método responsável por desbloquear todos os botões do ToolStrip, com exceção do "Abrir caixa".
        /// </summary>
        private void desbloquearBotoes()
        {
            this.vendasStripButton.Enabled = true;
            this.entregasStripButton.Enabled = true;
            this.cozinhaStripButton.Enabled = true;
            this.cozinhaToolStripMenuItem.Enabled = true;
            this.vendasToolStripMenuItem.Enabled = true;
            this.entregasToolStripMenuItem.Enabled = true;
        }

        /// <summary>
        /// Método responsável por instanciar a tela login e permite 3 tentativas!
        /// </summary>
        private void login()
        {
            LoginForm form = new LoginForm();
            if (form.ShowDialog() == DialogResult.OK)
            {
                usuarioAtual = form.getUsuarioAtual();
                if (usuarioAtual == null)
                {
                    if (this.tentativasLogin < 3)
                    {
                        this.tentativasLogin++;
                        login();
                    }
                    else { this.Close(); }
                }
                this.statusLogin.Text = "Autenticado como " + usuarioAtual.Login + " à(s) " + DateTime.Now.Hour + " hora(s) e " + DateTime.Now.Minute + " minuto(s) do dia " + DateTime.Now.Date.ToString().Remove(11) + ".";
                this.fecharSessaoStripButton.Enabled = true;
                this.bloquearBotoes();
            }
            else this.Close();
        }

        /// <summary>
        /// Método responsável por fechar todos os elementos MDIchild do form principal.
        /// </summary>
        private void fecharMDIchildren()
        {
            if (this.MdiChildren.Length > 0)
            {
                for (int i = 0; i < this.MdiChildren.Length; i++)
                {
                    this.MdiChildren[i].Close();
                }
            }
        }

        private void cadastrosToolStripMenuItem_Click(object sender, EventArgs e)
        {   
        }

        private void insumosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            InsumoForm mdiForm = new InsumoForm();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }

        private void clientesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ClienteForm mdiForm = new ClienteForm();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }

        private void bebidasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            BebidaForm mdiForm = new BebidaForm();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }

        private void funcionariosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FuncionarioForm mdiForm = new FuncionarioForm();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }

        private void pratosToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            PratoForm mdiForm = new PratoForm();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }

        private void gerarRelatórioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            relatorioInsumo = new EstoqueInsumo();
            relatorio = relatorioInsumo.gerarRelatorio();
            if (printPreviewDialog1.ShowDialog() == DialogResult.OK)
            {
                printDocument1.Print();
            }

            relatorio = null;
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            if (relatorio != null)
            {
                e.Graphics.DrawString(relatorio, caixaStripButton.Font, new SolidBrush(Color.Black), new Point(10, 50));
            }
        }

        private void entregasStripButton_Click(object sender, EventArgs e)
        {
            EntregasForm form = new EntregasForm();
            form.ShowDialog();
        }

        private void cozinhaStripButton_Click(object sender, EventArgs e)
        {
            ModuloCozinha.Cozinha mdiForm = new ModuloCozinha.Cozinha();
            mdiForm.MdiParent = this;
            mdiForm.Show();
        }      
    }
}
            /*if (this.MdiChildren == null || this.MdiChildren.ToList())
            {
                VendasForm mdiForm = new VendasForm();
                mdiForm.MdiParent = this;
                mdiForm.Show();
            }
            else
            {
                Form[] forms = this.MdiChildren.ToArray();
                foreach (Form f in forms)
                {
                    f.Close();
                }
             * 
             * 
                VendasForm mdiForm = new VendasForm();
                mdiForm.MdiParent = this;
                mdiForm.Show();
            }*/